/**
 * 自定义负载均衡配置类
 */
package com.jgj.cloud.order.config;

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;

/**
 * 自定义负载均衡配置类
 */
public class CustomLoadBalancerConfiguration {

    /**
     * 创建随机负载均衡器
     * @param environment  获取服务名称属性
     * @param loadBalancerClientFactory 用于获取负载均衡客户端工厂实例
     * @return
     */
    @Bean // 交给Spring容器管理
    public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
            Environment environment,
            LoadBalancerClientFactory loadBalancerClientFactory) {
        //步骤1：获取服务名称属性
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        //步骤2：创建随机负载均衡器
        // 参数1： 获取一个懒加载的 ServiceInstanceListSupplier 提供者（用于延迟获取服务实例列表，提高性能和资源利用率-->AP）
        // 参数2：服务名称
        return new RandomLoadBalancer(
                loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
}